Как выборочно запретить редактирование полей в представлении?
В представлении Update (Изменение или Редактирование), по-умолчанию, все поля (за исключением ключа (key) - имеется в виду поле, соответствующее primary key-столбцам из таблицы базы данных) доступны для изменения.
Запретить редактирование конкретных полей можно, определив аттрибут read-only для соответствующих данному полю свойства представления, например, таким способом:
Теперь вам необходимо добавить (refine) новое действие (action) для того, чтобы выбирать представление Create (Создание), и поисковое действие (the searching action) для выбора представления Update (Изменение). Для начала, определите новый контроллер в файле controllers.xml, пример ниже:
<controllername="MyTypical"><actionname="new"class="com.mycompany.myapplication.actions.MyNewAction"image="images/new.gif"on-init="true"keystroke="F2"><use-objectname="xava_view"/><!-- Not needed since v4m2--></action><actionname="search"by-default="if-possible"hidden="true"class="com.mycompany.myapplication.actions.MySearchAction"keystroke="F8"><use-objectname="xava_view"/><!-- Not needed since v4m2--></action></controller>
А теперь поставьте ваш контоллер в соответствие вашему модулю и определить действие по поиску (the searching action) для модуля. Создайте ваш модуль в application.xml следующим образом:
Теперь лишь остаётся определить логику для действий (actions). Для MySearchAction вы напишите (ЗАМЕЧАНИЕ: т.к. метод setViewName(...) (метка 2 на иллюстрации ниже) производит сброс (reset) внутренних данных, то до его выполнения необходимо сохранить данные "selected entity index values" (метка 1 на иллюстации ниже), а после его выполнения данные необходимо восстановить (метка 3 на иллюстрации)):
Как деактивировать свойство только для редактирования, но не для создания?
Вам нужно создать новое действие action and the searching action. Сначала определите контоллер в файле your controllers.xml, например вот так:
<controllername="MyTypical"><actionname="new"class="com.mycompany.myapplication.actions.MyNewAction"image="images/new.gif"on-init="true"keystroke="F2"><use-objectname="xava_view"/><!-- Not needed since v4m2--></action><actionname="search"by-default="if-possible"hidden="true"class="com.mycompany.myapplication.actions.MySearchAction"keystroke="F8"><use-objectname="xava_view"/><!-- Not needed since v4m2--></action></controller>
А теперь настало время привязать контроллер к нашему модулю, определив поисковое действие (the searching action) для модуля for the module. Это реализуется внесением следующего текста в application.xml:
Как обратиться к свойству Модели, которые не отображаются в Представлении?
Из Представления вы можете обращаться только к отображаемым данным. Тем не менее, возможно обратиться напрямую к Модели, используя класс MapFacade.
Вы можете это сделать, написав примерно такой код:
publicclass MyAction extends ViewBaseAction {publicvoid execute()throwsException{
Invoice invoice = (Invoice) MapFacade.findEntity(getModelName(), getView().getKeyValues());// Special discount is not shown in the viewBigDecimal specialDiscount = invoice.getSpecialDiscount();
...
}
...
В примере, показанном на иллюстрации выше, показано на примере свойства specialDiscount класса Invoice, как это реализовать.
Как сохранить предпочтения пользователя (Новое, начиная с v3.0.2)?
Сохранение пользовательских предпочтений обычно реализуется сами приложением, но можно использовать встроенную функциональность OpenXava.
OpenXava использует Java Preferences API для сохранения и загрузки предпочтений, но адаптированный для работы с мультипользовательском серверном окружении. Вы можете обращаться к объекту Preferences, используя класс Users OpenXava. Примерно таким образом:
// Obtain preferences for the current user// and node (an arbitrary category of your choice)Preferences preferences = Users.getCurrentPreferences().node("mynode");// Read a property valueboolean rowsHidden = preferences.getBoolean(ROWS_HIDDEN, false);
...
// Modify and save a property
preferences.putBoolean(ROWS_HIDDEN, rowsHidden);
preferences.flush();
Вам необходимо явно вызвать метод flush() , чтобы сохранить изменившиеся предпочтения пользователя.
Table of Contents
Практические советы (How to) ...
Как выборочно запретить редактирование полей в представлении?
В представлении Update (Изменение или Редактирование), по-умолчанию, все поля (за исключением ключа (key) - имеется в виду поле, соответствующее primary key-столбцам из таблицы базы данных) доступны для изменения.Запретить редактирование конкретных полей можно, определив аттрибут read-only для соответствующих данному полю свойства представления, например, таким способом:
Или, если вы работает с OpenXava 3, можно использовать аннотации:
Можно ли использовать разные представления для вставки и редактирования?
Для этого вам необходимо определить разные представления для вставки и редактирования, например, вот так:Или, если вы работает с OX3, можно использовать аннотации:
Теперь вам необходимо добавить (refine) новое действие (action) для того, чтобы выбирать представление Create (Создание), и поисковое действие (the searching action) для выбора представления Update (Изменение). Для начала, определите новый контроллер в файле controllers.xml, пример ниже:
А теперь поставьте ваш контоллер в соответствие вашему модулю и определить действие по поиску (the searching action) для модуля. Создайте ваш модуль в application.xml следующим образом:
Теперь лишь остаётся определить логику для действий (actions). Для MySearchAction вы напишите (ЗАМЕЧАНИЕ: т.к. метод setViewName(...) (метка 2 на иллюстрации ниже) производит сброс (reset) внутренних данных, то до его выполнения необходимо сохранить данные "selected entity index values" (метка 1 на иллюстации ниже), а после его выполнения данные необходимо восстановить (метка 3 на иллюстрации)):
И для MyNewAction:
Как деактивировать свойство только для редактирования, но не для создания?
Вам нужно создать новое действие action and the searching action. Сначала определите контоллер в файле your controllers.xml, например вот так:А теперь настало время привязать контроллер к нашему модулю, определив поисковое действие (the searching action) для модуля for the module. Это реализуется внесением следующего текста в application.xml:
Теперь остается только определить логику для Действий (actions). Для MySearchAction вы напишите:
И для MyNewAction:
Как обратиться к свойству Модели, которые не отображаются в Представлении?
Из Представления вы можете обращаться только к отображаемым данным. Тем не менее, возможно обратиться напрямую к Модели, используя класс MapFacade.Вы можете это сделать, написав примерно такой код:
В примере, показанном на иллюстрации выше, показано на примере свойства specialDiscount класса Invoice, как это реализовать.
Как сохранить предпочтения пользователя (Новое, начиная с v3.0.2)?
Сохранение пользовательских предпочтений обычно реализуется сами приложением, но можно использовать встроенную функциональность OpenXava.OpenXava использует Java Preferences API для сохранения и загрузки предпочтений, но адаптированный для работы с мультипользовательском серверном окружении. Вы можете обращаться к объекту Preferences, используя класс Users OpenXava. Примерно таким образом:
Вам необходимо явно вызвать метод flush() , чтобы сохранить изменившиеся предпочтения пользователя.